home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1994 January / PSL Monthly Shareware CD-ROM (Public Software Library) (January 1994).iso / games / dos / misc / boss_sw.com / BOSS_SW.ASM < prev    next >
Encoding:
Assembly Source File  |  1987-11-29  |  18.1 KB  |  833 lines

  1. print macro string
  2.        lea dx,string
  3.        mov ah,9
  4.        int 21h
  5.        endm
  6. ;
  7. ;
  8. ; this is a skeleton for passthrough  or resident programs
  9. ;
  10. ; when compiled as a pass through program it will use a little over
  11. ; 5K of system memory. When compiled as resident program it takes
  12. ; about 1.5k. When you add your own routines an work areas this
  13. ; will increase.
  14. ;
  15. passthru = 0  ; if = 1 it means MASM will create the passthrough
  16.               ; version. 0 means it will make the resident version
  17. ; if you are making a passthroug version then rou are not making
  18. ; a resident version. And if you are not making a passthrough then
  19. ; you are making a resident.
  20. ;
  21. if passthru
  22.    resident = 0
  23. else
  24.    resident = 1
  25. endif
  26. CSEG        SEGMENT PARA PUBLIC 'CODE'
  27.         ASSUME CS:CSEG,DS:CSEG,SS:CSEG,ES:CSEG
  28.         ORG        100H
  29. ENTPT:        JMP        setpass
  30. ; this area is used by the resident and passthrough versions
  31. ;
  32.         db  'Next 4 bytes are scan1,shift1,scan2,shift2:'
  33. scan1   db 30h     ; these are the hot key combinations
  34. shift1  db 10      ; scan being the scan code and shift being
  35. scan2   db 83h     ; the shift state.
  36. shift2  db 12      ;
  37.          db 'Copyright 1985. 1987 by',13,10
  38.          db 'Keith P. Graham',13,10,'238 Germonds Rd.',13,10
  39.          db 'W. Nyack, NY 10994',13,10
  40. ;
  41. ;
  42. ;
  43. mess2   db  'BOSS-SW is Already Resident',13,10,'$'
  44. ; data areas
  45. nine       db  9
  46. ten        db  10
  47. eighty     db  80
  48. keyin      db 48
  49. key        dw 4f4fh
  50. return     dw 0f4f4h
  51. color      db 0f0h
  52. c123x      db 0
  53. c123y      db 0
  54. almode     db 0
  55. ahcols     db 0
  56. window  db  'A1:                                     '
  57.         db  '                                   READY'
  58.         db  2*80 dup(' ')
  59.         db  '        A        B        C        D    '
  60.         db  '    E        F        G        H        '
  61.         db  '1                Keith P. Graham        '
  62.         db  '                                        '
  63.         db  '2               238 Germonds Road       '
  64.         db  '                                        '
  65.         db  '3              W. Nyack, NY 10994       '
  66.         db  '                                        '
  67.         db  '4    Call PC-Rockland at (914) 353-2176 '
  68.         db  'for the latest version of this program  '
  69.         db  '5 ',78 dup(' ')
  70.         db  '6 ',78 dup(' ')
  71.         db  '7 ',78 dup(' ')
  72.         db  '8 ',78 dup(' ')
  73.         db  '9 ',78 dup(' ')
  74.         db  '10',78 dup(' ')
  75.         db  '11',78 dup(' ')
  76.         db  '12',78 dup(' ')
  77.         db  '13',78 dup(' ')
  78.         db  '14',78 dup(' ')
  79.         db  '15',78 dup(' ')
  80.         db  '16',78 dup(' ')
  81.         db  '17',78 dup(' ')
  82.         db  '18',78 dup(' ')
  83.         db  '19',78 dup(' ')
  84.         db  '20',78 dup(' ')
  85.         db   80 dup(' ')
  86. sccx       dw 0
  87. vseg       dw 0b800h
  88. kbuffl   dw 0
  89. kbuff    db  80 dup(0)
  90. ;
  91. ;
  92. ;
  93. stack   dw   256  dup(0)
  94. int9      dd  0
  95. int9ip   equ word ptr int9
  96. int9cs   equ word ptr int9 + 2
  97. int17     dd  0
  98. int17ip   equ word ptr int17
  99. int17cs   equ word ptr int17 + 2
  100. savesp   dw  0
  101. savess   dw  0
  102. savespl  dw  0
  103. savessl  dw  0
  104. semaphore db  0
  105. cursor    dw  0
  106. cursmode  dw  0
  107. bhpage    db  0
  108. rmess    db  "Boss_switch deinstalled",13,10,10,'$'
  109. ;
  110. ; this data is used by the passthru program only
  111. ;
  112. if passthru
  113. command_line db 129 dup(0)
  114. ; parmblock is used for the parmeters for the execute
  115. parmblock  dw  0  ; this is the parmblock for execute
  116.            dw command_line
  117. tailds     dw  0
  118.            dw 5ch ; fcb in psp
  119. fcb1       dw  0
  120.            dw 6ch ; fcb in psp
  121. fcb2       dw  0
  122. endif
  123. START        PROC        NEAR
  124. ; the printint area is used to double check that we are installed twice
  125. printint:
  126.         cmp ax,cs:key
  127.         jne  no98
  128.         mov ax,cs:return
  129.         iret
  130. no98:
  131.         jmp  cs:int17
  132. keyboard:
  133. ; we are entering here due to a key being struck
  134. ; first check the keyboard area to see if the CTRL and ALT are ppasssed
  135. ;
  136. ; first call the keyboard interrupt so that it can handle the
  137. ; keystroke
  138. ;
  139.         pushf          ; fake the way an interrupt pushes flags
  140.         cli
  141.         call cs:int9
  142.         sti
  143.         push  ax
  144.         mov  al,1
  145. lock    xchg cs:semaphore,al
  146.         test al,al
  147.         jz   int9_shift
  148.         pop  ax
  149.         iret
  150. int9_return:
  151.         mov  cs:semaphore,0
  152.         pop  ax
  153.         iret
  154. int9_shift:
  155. ; no one is using this guy so we will check out the shift state
  156. ; this uses two hot keys, one is Alt-Left Shift-B and the other
  157. ; is Alt-Ctrl-Equal.
  158. ;
  159.         mov  ah,2   ; get shift status
  160.         int  16h    ; get keyboard
  161. ; status returns in al
  162.         and  al,0fh ; get rid of caps or num lock stuff
  163. ;
  164.         cmp  al,cs:shift1 ; has the Alt and Left shift been pressed
  165.         je   test_hot_1
  166.         cmp  al,cs:shift2 ; has the Alt and Ctrl been pressed
  167.         je   test_hot_2
  168.         jmp  int9_return
  169. test_hot_1:
  170. ; check to see if the next key to come in is B  scan 40h
  171.         mov  ah,1
  172.         int  16h
  173.         jnz  check_key1
  174.         jmp  int9_return
  175. check_key1:
  176.         cmp  ah,cs:scan1   ; Is the next character the "B" key?
  177.         je   goforit
  178.         jmp  int9_return
  179. test_hot_2:
  180. ; check to see if the next key to come in is =  scan 83h
  181.         mov  ah,1
  182.         int  16h
  183.         jnz  check_key2
  184.         jmp  int9_return
  185. check_key2:
  186.         cmp  ah,cs:scan2  ; Is the next character the "=" key?
  187.         je   goforit
  188.         jmp  int9_return
  189. goforit:
  190. ; save the world first switch to the local stack to save the
  191. ; actual stack.
  192. ; ax is the only thing in the local stack ( plus the interrupt ret)
  193.         sti
  194.         mov   cs:savessl,ss
  195.         mov   cs:savespl,sp
  196.         mov   ax,cs
  197.         mov   ss,ax
  198.         lea   sp,stack+510  ; double duty out of the local stack
  199.         push bx
  200.         push cx
  201.         push dx
  202.         push si
  203.         push di
  204.         push bp
  205.         push ds
  206.         push es
  207. ; get the p so others won't be messed up
  208.         mov  ah,0
  209.         int  16h
  210.         mov  ax,cs
  211.         mov  ds,ax
  212.         mov  es,ax
  213.         call getcurs   ; gets the current cursor position
  214. ;
  215. ;
  216. ;   the program goes here
  217. ; in program
  218.         mov   color,030h
  219.         cmp   almode,2
  220.         je    col80c
  221.         cmp   almode,3
  222.         je    col80c
  223.         cmp   almode,7
  224.         je    col80M
  225. ; in a graphics mode
  226.         mov   sccx,16*1024
  227.         jmp   savescr
  228. col80c:
  229. ; video state is 80 col color
  230.         mov   sccx,4*1024
  231.         jmp   savescr
  232. col80m:
  233. ; video state is 80 col mono
  234.         mov   sccx,4*1024
  235.         mov   vseg,0b000h
  236.         mov   color,01111000b
  237.         jmp   savescr
  238. savescr:
  239.  ; save the video screen
  240.         mov   cx,sccx
  241.         mov   ds,cs:vseg
  242.         mov   si,0
  243.         lea   di,wsave
  244.         cld
  245. rep     movsb
  246.         mov   ax,cs
  247.         mov   ds,ax
  248. ; switch to display mode
  249.         mov   ah,0
  250.         mov   al,3
  251.         int   10h
  252. ;       mov   dx,3d8h
  253. ;       mov   al,9
  254. ;       out   dx,al
  255. ; display fake screen
  256.         mov   es,vseg
  257.         mov   di,0
  258.         lea   si,window
  259.         mov   cx,25*80
  260.         mov   bx,1
  261.         mov   dx,1
  262.         cld
  263. disploop:
  264.         lodsb
  265.         mov   ah,07h
  266.         cmp  bx,80
  267.         jng  sameline
  268.         mov  bx,1
  269.         inc  dx
  270. sameline:
  271.         cmp  dx,4
  272.         je   blue
  273.         cmp  dx,4
  274.         jl   topline
  275.         cmp  bx,5
  276.         jl   blue
  277.         jmp  dispsto
  278. blue:
  279.         cmp  dx,25
  280.         je   dispsto
  281.         mov  ah,color
  282.         jmp  dispsto
  283. topline:
  284.         cmp  dx,1
  285.         jne  dispsto
  286.         cmp  bx,75
  287.         jg   blue
  288. dispsto:
  289.         stosw
  290.         inc  bx
  291.         loop disploop
  292.         mov   ax,cs
  293.         mov   es,ax
  294. bigcurs:
  295. ; set the cell number
  296.         mov  es,vseg
  297.         mov  di,0
  298.         mov al,c123x
  299.         add  al,41h
  300.         mov  ah,07h
  301.         stosw
  302.         mov  al,c123y
  303.         inc  al
  304.         mov  ah,0
  305.         div  ten
  306.         push ax
  307.         add  al,30h
  308.         mov  ah,07h
  309.         cmp  al,30h
  310.         je   zsupp
  311.         stosw
  312. zsupp:
  313.         pop  ax
  314.         mov  al,ah
  315.         add  al,30h
  316.         mov  ah,07h
  317.         stosw
  318.         mov  al,':'
  319.         mov  ah,07h
  320.         stosw
  321.         mov  cx,30
  322.         cld
  323.         mov  ax,0720h
  324. rep     stosw
  325.         mov  ax,cs
  326.         mov  es,ax
  327. ; set the cursor
  328.         mov al,c123x
  329.         mov ah,0
  330.         mul nine
  331.         add al,4
  332.         mov dl,al
  333.         mov dh,c123y
  334.         add dh,4
  335.         mov cx,9
  336.         mov si,0
  337. loop123:
  338. ; locate the cursor at current byte
  339.         push  cx
  340.         push dx
  341.         mov  ah,2
  342.         mov  bh,0
  343.         int  10h
  344.         mov  ah,8
  345.         int  10h
  346.         push ax
  347.         mov  bl,color
  348.         mov  cx,1
  349.         mov  ah,9
  350.         int  10h
  351. ; now the  other location
  352.         mov  dx,0004h
  353.         add  dx,si
  354.         inc  si
  355.         mov  ah,2
  356.         int  10h
  357.         pop  ax
  358.         mov  bl,07
  359.         mov  cx,1
  360.         mov  ah,9
  361.         int  10h
  362.         pop  dx
  363.         add  dl,1
  364.         pop  cx
  365.         loop loop123
  366. ; wait for keyboard input
  367. waitkey:
  368.         mov  dx,0004h
  369.         add  dx,kbuffl
  370.         mov  ah,2
  371.         mov  bh,0
  372.         int  10h
  373.         mov  ah,0
  374.         int  16h
  375.         push ax
  376. ; now undo the big cursor
  377.         mov al,c123x
  378.         mov ah,0
  379.         mul nine
  380.         add al,4
  381.         mov dl,al
  382.         mov dh,c123y
  383.         add dh,4
  384.         mov cx,9
  385.         mov si,0
  386. loop123C:
  387. ; locate the cursor at current byte
  388.         push  cx
  389.         push dx
  390.         mov  ah,2
  391.         mov  bh,0
  392.         int  10h
  393.         mov  ah,8
  394.         int  10h
  395.         mov  bl,07h
  396.         mov  cx,1
  397.         mov  ah,9
  398.         int  10h
  399.         pop  dx
  400.         add  dl,1
  401.         pop  cx
  402.         loop loop123c
  403.         pop  ax
  404.         cmp  ah,1
  405.         jne  noesc
  406.         jmp  restore
  407. noesc:
  408.         cmp  ah,72
  409.         jne  noup
  410. ; up key was hit
  411.         cmp  c123y,0
  412.         jg   upz
  413.         mov  c123y,20
  414. upz:
  415.         sub  c123y,1
  416.         jmp  do13
  417. noup:
  418.         cmp  ah,75
  419.         jne  noleft
  420. ; left key was pressed
  421.         cmp  c123x,0
  422.         jg   leftz
  423.         mov  c123x,8
  424. leftz:
  425.         sub  c123x,1
  426.         jmp  do13
  427. noleft:
  428.         cmp  ah,77
  429.         jne  noright
  430. ; right cursor pressed
  431.         cmp  c123x,7
  432.         jl   rightz
  433.         mov  c123x,0
  434.         jmp  do13
  435. rightz:
  436.         add  c123x,1
  437.         jmp  do13
  438. noright:
  439.         cmp  ah,80
  440.         jne  nodown
  441. ; down key pressed
  442.         cmp  c123y,19
  443.         jl   downz
  444.         mov  c123y,0
  445.         jmp   do13
  446. downz:
  447.         add  c123y,1
  448.         jmp  do13
  449. nodown:
  450.         cmp  ah,71
  451.         jne  nohome
  452.         mov  c123y,0
  453.         mov  c123x,0
  454.         jmp  do13
  455. nohome:
  456.         cmp  ah,79
  457.         jne  noend
  458.         mov  c123y,19
  459.         mov  c123x,7
  460.         jmp  do13
  461. noend:
  462.         cmp  al,8
  463.         jne  noback
  464. ; got a backspace
  465.         cmp  kbuffl,0
  466.         jne  fixk
  467.         jmp  bigcurs
  468. fixk:
  469.         sub  kbuffl,1
  470.         jmp  bigcurs
  471. noback:
  472. ; we have a character
  473.         cmp  al,13
  474.         jne  dobuff
  475.         cmp  al,0
  476.         jne  nozero
  477.         jmp  bigcurs
  478. nozero:
  479.         jmp  do13
  480. dobuff:
  481.         add  kbuffl,1
  482.         mov  bx,kbuffl
  483.         mov  kbuff[bx]-1,al
  484.         push bx
  485. ; store in window
  486.         push ax
  487.         mov  al,c123x
  488.         mov  ah,0
  489.         mul  nine
  490.         add  ax,3
  491.         push ax
  492.         mov  al,c123y
  493.         mov  ah,0
  494.         add  al,4
  495.         mul  eighty
  496.         pop  bx
  497.         add  bx,ax
  498.         add  bx,kbuffl
  499.         pop  ax
  500.         mov  window[bx],al
  501.         pop  bx
  502.         mov  dx,0004h
  503.         add  dx,bx
  504.         dec  dx
  505.         push ax
  506.         mov  ah,2
  507.         mov  bh,0
  508.         int  10h
  509.         pop  ax
  510.         mov  bl,07h
  511.         mov  cx,1
  512.         mov  ah,9
  513.         int  10h
  514.         inc  dx
  515.         mov  ah,2
  516.         mov  bh,0
  517.         int  10h
  518.         jmp  waitkey
  519. do13:
  520.         cmp  kbuffl,0
  521.         jne  action
  522.         jmp  bigcurs
  523. action:
  524.         mov al,c123x
  525.         mov ah,0
  526.         mul nine
  527.         add al,4
  528.         mov dl,al
  529.         mov dh,c123y
  530.         add dh,4
  531.         mov di,0
  532.         mov  cx,kbuffl
  533.         mov  kbuffl,0
  534.         lea si,kbuff
  535. doline:
  536.         push  cx
  537.         push dx
  538.         mov  ah,2
  539.         mov  bh,0
  540.         int  10h
  541.         lodsb
  542.         mov  bl,color
  543.         mov  cx,1
  544.         mov  ah,9
  545.         int  10h
  546.         pop  dx
  547.         add  dl,1
  548.         pop  cx
  549.         loop doline
  550.         mov  ax,cs
  551.         mov  es,ax
  552.         jmp  bigcurs
  553. ; restore the screen
  554. restore:
  555.         mov  ah,0
  556.         mov  al,almode
  557.         int  10h
  558.         mov   cx,sccx
  559.         mov   es,cs:vseg
  560.         mov   di,0
  561.         lea   si,wsave
  562.         cld
  563. rep     movsb
  564.         mov   ax,cs
  565.         mov   es,ax
  566. ;
  567. ;
  568. ;
  569. exit_prog:
  570.         call retcurs   ; restores the old cursor position
  571.         pop  es
  572.         pop  ds
  573.         pop  bp
  574.         pop  di
  575.         pop  si
  576.         pop  dx
  577.         pop  cx
  578.         pop  bx
  579.         mov  ss,cs:savessl
  580.         mov  sp,cs:savespl
  581.         pop  ax
  582.         mov   cs:semaphore,0
  583.         iret
  584. START        ENDP
  585. getcurs   proc  near
  586. ; get video state
  587.           mov ah,15
  588.           int 10h
  589.           mov bhpage,bh
  590.           mov almode,al
  591.           mov ahcols,ah
  592.           mov ah,3
  593.           mov bh,bhpage
  594.           int  10h
  595.           mov  cursor,dx
  596.           mov  cursmode,cx
  597.           ret
  598. getcurs   endp
  599. retcurs   proc  near
  600.           mov ah,2
  601.           mov  dx,cursor
  602.           mov bh,bhpage
  603.           int  10h
  604.           ret
  605. retcurs   endp
  606. ; the tone routines produce glisandos based on the value of si
  607. blip    proc  near
  608.         push  si
  609.         mov   si,30
  610.         call  tone
  611.         pop   si
  612.         ret
  613. blip    endp
  614. blop    proc  near
  615.         push  si
  616.         mov   si,-30
  617.         call  tone
  618.         pop   si
  619.         ret
  620. blop    endp
  621. tone    proc  near
  622.         push  ax
  623.         push  bx
  624.         push  cx
  625.         push  dx
  626.         mov   dx,3    ; tone rate
  627.         mov   bx,240  ; starting freq
  628.         mov   cx,750  ; ending frequency
  629.         cmp   si,0
  630.         jg    do_blip
  631. ; here we do blop
  632.         mov   bx,630  ; starting freq
  633.         mov   cx,150  ; ending frequency
  634. do_blip:
  635. ; turn on tone
  636. i0:
  637.         push  cx
  638.         push  bx
  639.         in     al,61h
  640.         or     al,3
  641.         out    61h,al
  642. ; loop parameters
  643.         mov    cx,bx
  644.  ; set frequency
  645.         mov    dx,12h
  646.         mov    ax,34deh
  647.         div    cx
  648.         mov    cx,ax
  649. ; set tone
  650.         mov    al,cl
  651.         out    42h,al
  652.         mov    al,ch
  653.         out    42h,al
  654. i2:     loop i2
  655.         pop    bx
  656.         pop    cx
  657.         cmp    bx,cx
  658.         je     ip3
  659.         add    bx,si
  660.         jmp    i0
  661. ip3:
  662.  ;turn off tone
  663.         in  al,61h
  664.         and al,11111100b
  665.         out 61h,al
  666.         pop  dx
  667.         pop  cx
  668.         pop  bx
  669.         pop  ax
  670.         ret
  671. tone    endp
  672. if resident
  673. wsave equ this byte
  674. endif
  675. setpass  proc  near
  676. ; set up a local stack
  677.         lea  sp,stack+510
  678. ; first check the printer interrupt by asking for a character
  679.         mov  ax,key
  680.         int  17h
  681.         cmp  ax,return
  682.         jne  okinstall
  683.         print mess2
  684.         int  20h
  685. okinstall:
  686. ;
  687. ; redirect interrupts here
  688. ;
  689.         push  es
  690.         mov   ax,3509h
  691.         int   21h
  692.         mov   int9cs,es
  693.         mov   int9ip,bx
  694.         pop   es
  695.         mov   ah,25h
  696.         mov   al,9h
  697.         lea   dx,keyboard
  698.         int   21h
  699. ;
  700.         push  es
  701.         mov   ax,3517h
  702.         int   21h
  703.         mov   int17cs,es
  704.         mov   int17ip,bx
  705.         pop   es
  706.         mov   ah,25h
  707.         mov   al,17h
  708.         lea   dx,printint
  709.         int   21h
  710. print   mess1
  711. if  passthru
  712. ;
  713. ;  prepare for the exec function
  714. ; shrink memory
  715.    lea   bx,last_byte+(32*1024)    ; last byte of program
  716.    add   bx,15           ; trick to round up
  717.    mov   cl,4
  718.    shr   bx,cl           ; divide by 16 to get number of 16 byte blocks
  719.    mov   ah,4ah          ; shrink
  720.    int   21h
  721. ; create the commandline
  722. ;
  723. ; the command line has to start with /C and then the command
  724. ; and then end with a carriage return. It must have a byte at
  725. ; the front saying how long it is
  726.    cld
  727.    lea   di,command_line+1
  728.    mov   al,'/'
  729.    stosb
  730.    mov   al,'C'
  731.    stosb
  732.    mov   al,' '
  733.    stosb
  734. ; now copy the real command line in
  735.    mov   si,81h
  736.    mov   cl,byte ptr ds:[80h]
  737.    mov   ch,0
  738.    push  cx
  739.    cmp   cx,0
  740.    je    no_move
  741.    cld
  742. rep movsb
  743. no_move:
  744.    pop   cx
  745.    add   cx,3
  746.    mov   command_line,cl
  747. ; set up the control block with segment information
  748.    mov    tailds,ds
  749.    mov    fcb1,ds
  750.    mov    fcb2,ds
  751. ;
  752. ; find the comspec
  753. ;
  754.    mov    es,word ptr  ds:[2ch]
  755.    mov     di,0
  756.    mov     cx,255
  757. env_loop:
  758.    cld
  759.    mov   al,'='
  760. repne   scasb
  761. ; if there is no comspec, there is something wrong with the system
  762.    cmp   word ptr es:[di-3],'CE'
  763.    jne   env_loop
  764.    cmp   word ptr es:[di-5],'PS'
  765.    jne   env_loop
  766.    cmp   word ptr es:[di-7],'MO'
  767.    jne   env_loop
  768.    cmp   byte ptr es:[di-8],'C'
  769.    jne   env_loop
  770. ; got the comspec
  771. ;
  772. ; save the stack
  773. ;
  774.    mov   savess,ss
  775.    mov   savesp,sp
  776. ;
  777. ; set up the segment registers
  778. ;
  779. ; the comspec segment is in ES and should be in DS
  780. ;
  781.    push  es
  782.    pop   ds
  783.    push  cs
  784.    pop   es
  785.    mov   dx,di
  786.    lea   bx,parmblock
  787.    mov   al,0
  788.    mov   ah,4bh
  789. ; execute the thing
  790.    int   21h
  791. ; here is where we return
  792.    mov   ss,cs:savess
  793.    mov   sp,cs:savesp
  794.    mov   ax,cs
  795.    mov   ds,ax
  796.    mov   es,ax
  797. ; say that we did it
  798.    lea   dx,rmess
  799.    mov   ah,9
  800.    int  21h
  801. ;
  802. ; now reset the interrupts so we can leave
  803. ;
  804.         push  ds
  805.         lds   dx,int9
  806.         mov   ah,25h
  807.         mov   al,9h
  808.         int   21h
  809.         pop   ds
  810.         push  ds
  811.         lds   dx,int17
  812.         mov   ah,25h
  813.         mov   al,17h
  814.         int   21h
  815.         pop   ds
  816.         int   20h
  817. endif
  818. if resident
  819.         lea   dx,setpass+(32*1024)
  820.         int 27h
  821. endif
  822. setpass  endp
  823. last_byte equ this byte
  824. if passthru
  825. wsave equ this byte
  826. endif
  827. mess1   db  'Boss Switch',13,10
  828.         db  'Press ALT-LEFT SHIFT-B',13,10
  829.         db  'when the boss comes',13,10,'$'
  830.         db  'Copyright 1985, 1987 by Keith P. Graham',13,10,'$'
  831. CSEG        ENDS
  832.         END        ENTPT
  833.